package cn.wolfcode.shop.service.impl;

import cn.wolfcode.shop.domain.User;
import cn.wolfcode.shop.redis.RedisServer;
import cn.wolfcode.shop.redis.UserKeyPrefix;
import cn.wolfcode.shop.service.ISeckillUserService;
import com.alibaba.dubbo.config.annotation.Service;
import org.springframework.beans.factory.annotation.Autowired;

/**
 * 秒杀中的用户操作放在秒杀系统中,防止因为秒杀压力过大时,频繁请求其他系统模块造成 其他模块的压力剧增
 */
@Service
public class SeckillUserServiceImpl implements ISeckillUserService{
    @Autowired
    private RedisServer redisServer;

    /**
     * 通过token获取redis存储的user对象
     * 每次调用该方法则表示已登录用户在使用cookie中缓存的token请求资源
     * 则应该将cookie和redis对应的数据 重置有效时间  增加用户体验:用户一直在使用应用的时候,不需要重复登录
     * @param token
     * @return
     */
    @Override
    public User getByToken(String token) {
        User user = redisServer.get(UserKeyPrefix.USER_TOKEN, token, User.class);
        //redis中存在当前token对应的用户 则给其重置有效时间
        if(user!=null){
            //重新设置当前redis缓存中当前用户相关的key的有效时间
            redisServer.set(UserKeyPrefix.USER_TOKEN,token,user);
        }
        return user;
    }
}
